package org.app.appjson.adapter;

import org.app.appjson.exception.AppJsonException;
import org.app.appjson.reader.JsonLexer;
import org.app.appjson.reader.JsonToken;
import org.app.appjson.reader.ReadHandler;
import org.app.appjson.writer.WriteHandler;

/**
 * String类型适配器
 * @author lizhongsi
 * @version 1.0
 * @since 1.0
 */
public class StringAdapter implements TypeAdapter {

    public static String read(ReadHandler handler) throws AppJsonException {
        JsonLexer lexer = handler.getLexer();
        if (lexer.peek().getType() == JsonToken.NULL) {
            lexer.next();// 消费null
            return null;
        }
        if (lexer.peek().getType() == JsonToken.STRING) {
            return lexer.next().getValue();
        }
        throw new AppJsonException("StringAdapter read exception.");
    }

    public static void write(WriteHandler handler) throws AppJsonException {
        Object object = handler.getObject();
        if (object.getClass() != String.class) {
            throw new AppJsonException("Object is not String type.");
        }
        handler.write("\"");
        handler.write(handler.getObject().toString());
        handler.write("\"");
    }
}
